package mt3284;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
	// 计算next数组（前缀表）
	// 代码和视频里的算法稍有区别，视频算法的模式串下标从1开始的
	// Java不适用视频里的方式，以下面代码为模板
	// next[0]的值是-1，数组长度是模式串长度加1
	static int[] getNext(String s) {
		int[] next = new int[s.length()+1];
        next[0] = -1; // 初始值设为-1
        int j = 0; // 模式串指针
        int t = -1; // 前缀指针
        
        while (j < s.length()) {
            if (t == -1 || s.charAt(j) == s.charAt(t)) {
                j++;
                t++;
                next[j] = t; // 常规情况，next[j+1] = k+1
            } else {
                t = next[t]; // 不匹配时回溯
            }
        }
        return next;
	}
	
	// KMP匹配算法，查找是否有匹配，失败返回-1，成功返回匹配索引位置
    public static int kmpSearch(String text, String pattern) {
        int[] next = getNext(pattern);
        int i = 0; // 文本串指针
        int j = 0; // 模式串指针
        
        while (i < text.length() && j < pattern.length()) {
            if (j == -1 || text.charAt(i) == pattern.charAt(j)) {
                i++;
                j++;
            } else {
                j = next[j]; // 利用next数组跳过不必要的比较
            }
        }
        
        if (j == pattern.length()) {
            return i - j; // 匹配成功，返回起始位置
        } else {
            return -1; // 匹配失败
        }
    }
	
	//KMP算法，计算pattern在text中匹配的位置
    //text全文匹配并记录所有匹配的位置
    //巧妙利用了getNext算法
	static List<Integer> find_occurrences(String text, String pattern) {
	    String cur = pattern + '#' + text;
	    int sz1 = text.length(), sz2 = pattern.length();
	    List<Integer> v = new ArrayList<>();
	    int[] lps = getNext(cur);
	    for (int i = sz2 + 1; i <= sz1 + sz2; i++) {
	        if (lps[i+1] == sz2) {
	            v.add(i - 2 * sz2);
	        }
	    }
	    return v;
	}	

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        String T = br.readLine(); //文本T
        String P = br.readLine(); //字符串P
        
        List<Integer> res = find_occurrences(T,P);
        
        for(int i=0;i<res.size();i++) {
        	System.out.println(res.get(i));
        }
         
	}

}
